// pages/list/list.js
const app = getApp()
const fetch = app.fetch

const categoryPosition = [] // 右侧列表每一个分类高度数据

Page({

  /**
   * 页面的初始数据
   */
  data: {
    foodList: [], //餐单列表数据
    promotion: { // 满减参数（满100块优惠5元）
      k: 100,
      v: 5
    },

    activeIndex: 0,
    tabIndex: 0,

    /* 购物车参数 */
    cartNumber: 0, // 购物车商品数量
    cartPrice: 0, // 购物车总价格
    cartList: {}, // 购物车商品数据对象

    showCart: false, // 用于控制购物车蒙版显示
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    fetch('/api/foodlist').then(data => {
      console.log('餐单列表数据：', data);
      this.setData({
        foodList: data
      }, () => {
        var query = wx.createSelectorQuery()
        var top = 0
        var height = 0
        query.select('.food').boundingClientRect(rec => {
          top = rec.top
          height = rec.height
        })
        query.selectAll('.food-category').boundingClientRect(rec => {
          rec.forEach(rect => {
            categoryPosition.push(rect.top - top - height / 3)
          })
        })
        query.exec()
      })
    })
  },

  /* 大类点击事件 */
  tapCategory(e) {
    console.log(e);
    let index = e.currentTarget.dataset.index
    this.setData({
      activeIndex: index,
      tabIndex: index,
    })
  },

  /* 右侧菜单滚动事件 */
  onFoodScroll(e) {
    //console.log(e);
    var scrollTop = e.detail.scrollTop // 餐单滚动到的位置
    var activeIndex = 0
    categoryPosition.forEach((item, i) => {
      if (scrollTop >= item) {
        activeIndex = i
      }
    })
    if (activeIndex !== this.data.activeIndex) {
      this.setData({
        activeIndex
      })
    }
  },


  addToCart(e) {
    //console.log(e);
    let categoryindex = e.currentTarget.dataset.categoryindex
    let foodindex = e.currentTarget.dataset.foodindex
    //console.log(categoryindex, foodindex);
    let food = this.data.foodList[categoryindex].food[foodindex]
    console.log('选择的商品：', food);

    let cartList = this.data.cartList // 购物车原始数据对象
    if (cartList[food.id]) {
      // 已经有了，数量加一
      ++cartList[food.id].number
    } else {
      // 没有数据，新增一个
      cartList[food.id] = {
        //id: food.id,
        foodId: food.id,
        name: food.name,
        price: food.price,
        number: 1,
      }
    }

    this.setData({
      cartList: cartList,
      cartNumber: this.data.cartNumber + 1, // 购物车商品数量
      cartPrice: this.data.cartPrice + food.price, // 购物车总价格
    })

  },

  /* 点击蒙版事件 */
  showCartList() {
    if (this.data.cartNumber > 0) {
      this.setData({
        showCart: !this.data.showCart
      })
    }
  },


  cartAdd(e) {
    //console.log(e);
    let id = e.currentTarget.dataset.id
    let cartList = this.data.cartList
      ++cartList[id].number // 商品数量加一
    this.setData({
      cartList: cartList,
      cartNumber: this.data.cartNumber + 1,
      cartPrice: this.data.cartPrice + cartList[id].price,
    })
  },

  cartDec(e) {
    let id = e.currentTarget.dataset.id
    let cartList = this.data.cartList
    if (cartList[id]) {
      var price = cartList[id].price // 为了避免空指针异常
      if (cartList[id].number > 1) {
        --cartList[id].number
      } else {
        delete cartList[id]
      }
      this.setData({
        cartList: cartList,
        cartNumber: this.data.cartNumber - 1,
        /* !!!!!!!!!! */
        cartPrice: this.data.cartPrice - price,
      })
      // 购物车清空后，可以关闭购物车蒙版
      if (this.data.cartNumber <= 0) {
        this.setData({
          showCart: false
        })
      }
    }
  },

  // 清空购物车
  cartClear() {
    this.setData({
      cartList: {},
      cartNumber: 0,
      cartPrice: 0,
      showCart: false
    })
  },

  //提交订单
  order() {
    if (this.data.cartNumber === 0) {
      return // 购物车没有数据就不能提交
    }

    fetch('/api/orderSubmit', {
      price: this.data.cartPrice, // 总价格
      number: this.data.cartNumber, // 总数量
      items: Object.values(this.data.cartList) //购物车明细
    }, 'POST').then(res => {
      console.log('提交订单返回：', res);
      wx.navigateTo({
        url: '/pages/order/checkout/checkout?order_id=' + res.data.orderId,
      })

    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})